package com.heima.skydemo.controller.admin;

import com.heima.skydemo.auto.AutoFillCreate;
import com.heima.skydemo.auto.AutoFillUpdate;
import com.heima.skydemo.domin.common.PageResult;
import com.heima.skydemo.domin.common.Result;
import com.heima.skydemo.domin.dto.CategoryDTO;
import com.heima.skydemo.domin.dto.CategoryPageQueryDTO;
import com.heima.skydemo.entity.Category;
import com.heima.skydemo.service.ICategoryService;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/admin/category")
@Slf4j
@RequiredArgsConstructor
@ApiOperation("分类相关接口")
public class CategoryController {
    @Autowired
    private ICategoryService categoryService;

    /**
     * 分类分页查询
     *
     * @param categoryPageQueryDTO 分页查询条件DTO
     * @return 分页查询结果
     */
    @GetMapping("/page")
    @ApiOperation("分类分页查询")
    public Result<PageResult> pageQuery(CategoryPageQueryDTO categoryPageQueryDTO) {
        System.out.println("分类分页查询：{}"+ categoryPageQueryDTO);
        PageResult pageResult =   categoryService.pageQuery(categoryPageQueryDTO);
        return Result.success(pageResult);
    }

    /**
     * 修改分类信息
     *
     * @param categoryDTO 分类数据传输对象（包含更新数据）
     * @return 操作结果
     */
    @PutMapping("")
    @ApiOperation("修改分类信息")
    @AutoFillUpdate
    @Transactional
    public Result update(@RequestBody CategoryDTO categoryDTO){
        log.info("修改分类：{}",categoryDTO);
        Category category = new Category();
        BeanUtils.copyProperties(categoryDTO,category);
        //当前时间
        categoryService.updateById(category);
        return Result.success();
    }

    /**
     * 启用/禁用分类状态
     *
     * @param status 目标状态（1-启用，0-禁用）
     * @param id 分类ID
     * @return 操作结果
     */
    @PostMapping("/status/{status}")
    @ApiOperation("启用/禁用分类状态")
    public Result startOrstop(@PathVariable("status") Integer status, Long id){
        log.info("启用/禁用分类状态：{}",status);
        categoryService.lambdaUpdate().set(Category::getStatus,status).eq(Category::getId,id).update();
        return Result.success();
    }

    /**
     * 新增分类
     *
     * @param categoryDTO 分类数据传输对象（包含新增数据）
     * @return 操作结果
     */
    @PostMapping("")
    @ApiOperation("新增分类")
    @AutoFillCreate
    @AutoFillUpdate
    public Result save(@RequestBody CategoryDTO categoryDTO){
        log.info("新增分类：{}",categoryDTO);
        Category category = new Category();
        BeanUtils.copyProperties(categoryDTO,category);

        categoryService.save(category);
        return Result.success();
    }

    /**
     * 删除分类
     *
     * @param id 要删除的分类ID
     * @return 操作结果
     */
    @DeleteMapping("")
    @ApiOperation("删除分类")
    public Result delete(Long id){
        log.info("删除分类：{}",id);
        categoryService.removeById(id);
        return Result.success();
    }

    /**
     * 根据类型查询分类列表
     *
     * @param type 分类类型
     * @return 对应类型的分类列表
     */
    @GetMapping("/list")
    @ApiOperation("根据类型查询分类列表")
    public Result<List> list(Integer type){
        log.info("根据类型查询分类列表：{}",type);
        List<Category> list = categoryService.lambdaQuery().eq(Category::getType, type).list();
        return  Result.success(list);
    }
}